#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

#define START	100
#define END  	300

int is_prime(int i)
{
	int j;

	sleep(1); // Simulate time-consuming task

	for (j = 2; j < i / 2; j++) {
		if (i % j == 0) {
			return 0;
		}
	}
	return 1; // 是质数
}

int main(void)
{
	pid_t pid;
	int i;

	for (i = START; i <= END; i++) {
		pid = fork();

		if (pid < 0) {
			perror("Error creating fork");
			exit(1);
		} else if (pid == 0) {
			if (is_prime(i)) {
				printf("[%d] %d is prime\n", getpid(), i);
			}
			exit(0);
		}
	}

	for (i = START; i <= END; i++) {
		wait(NULL);
	}

	return 0;
}
